package inutan.game.prop;

import inutan.common.context.FlowContext;
import inutan.data.Resource.Type;
import inutan.game.business.GameFlowContext;
import inutan.game.entity.UserInfo;
import inutan.game.entity.prop.BaseItemInfo;
import org.ricks.orm.OrmContext;

import java.util.List;

public class PayDiamondOperate implements OperatePropInterface{

    @Override
    public List<BaseItemInfo> props(GameFlowContext context) {
        UserInfo userInfo = OrmContext.me().uniqueCacheLoad(UserInfo.class, context.getUserId()).get();
        return List.of(new BaseItemInfo(Type.PAYDIAMOND, Type.PAYDIAMOND, userInfo.getPayDiamond()));
    }

    @Override
    public void useProp(GameFlowContext context, List<BaseItemInfo> useItem) {
        UserInfo userInfo = OrmContext.me().uniqueCacheLoad(UserInfo.class,context.getUserId()).get();
        int amount = useItem.stream().mapToInt(x -> x.getCount()).sum();
        userInfo.setGold(userInfo.getGold() - amount);
        System.err.println("消耗钻石：" + amount + " , 剩余钻石：" + userInfo.getGold());
        OrmContext.me().update(userInfo);
    }

    @Override
    public List<BaseItemInfo> addProp(GameFlowContext context, List<BaseItemInfo> addProps) {
        int count = addProps.stream().mapToInt(x -> x.getCount()).sum();
        UserInfo userInfo = OrmContext.me().uniqueCacheLoad(UserInfo.class,context.getUserId()).get();
        userInfo.setPayDiamond(userInfo.getPayDiamond() + count);
        OrmContext.me().update(userInfo);
        return addProps;
    }

    @Override
    public boolean checkItemNum(GameFlowContext context, List<BaseItemInfo> props) {
        int count = props.stream().mapToInt(x -> x.getCount()).sum();
        UserInfo userInfo = OrmContext.me().uniqueCacheLoad(UserInfo.class,context.getUserId()).get();
        return userInfo.getPayDiamond() >= count;
    }
}
